﻿<?xml version="1.0" encoding="utf-8"?>
<xsd:schema attributeFormDefault="unqualified"
		elementFormDefault="unqualified"
		xmlns:xsd="http://www.w3.org/2001/XMLSchema">

	<xsd:complexType name="membertype">
		<xsd:choice maxOccurs="unbounded" minOccurs="0">
			<xsd:element name="attribute" type="attribute" />
		</xsd:choice>
		<xsd:attribute name="feature" />
		<xsd:attribute name="featurevalue" type="xsd:boolean" />
		<xsd:attribute name="featuredefault" type="xsd:boolean" />
		<xsd:attribute name="name" />
		<xsd:attribute name="signature" />
	</xsd:complexType>

	<xsd:complexType name="method">
		<xsd:complexContent>
			<xsd:extension base="membertype">
				<xsd:choice maxOccurs="unbounded" minOccurs="0">
					<xsd:choice maxOccurs="unbounded" minOccurs="0">
						<xsd:element name="parameter">
							<xsd:complexType>
								<xsd:choice maxOccurs="unbounded" minOccurs="0">
									<xsd:element name="attribute" type="attribute" />
								</xsd:choice>
								<xsd:attribute name="name" use="required" />
							</xsd:complexType>
						</xsd:element>
					</xsd:choice>
					<xsd:choice maxOccurs="1" minOccurs="0">
						<xsd:element name="return">
							<xsd:complexType>
								<xsd:choice maxOccurs="unbounded" minOccurs="0">
									<xsd:element name="attribute" type="attribute" />
								</xsd:choice>
							</xsd:complexType>
						</xsd:element>
					</xsd:choice>
				</xsd:choice>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>

	<xsd:complexType name="argument" mixed="true">
		<xsd:choice minOccurs="0" maxOccurs="unbounded">
			<xsd:element name="argument" type="argument" />
		</xsd:choice>
		<xsd:attribute name="type" />
	</xsd:complexType>

	<xsd:complexType name="attribute">
		<xsd:choice maxOccurs="unbounded" minOccurs="0">
			<xsd:element name="argument" type="argument" />
			<xsd:element name="property">
				<xsd:complexType mixed="true">
					<xsd:attribute name="name" use="required" />
				</xsd:complexType>
			</xsd:element>
		</xsd:choice>
		<xsd:attribute name="internal" />
		<xsd:attribute name="fullname" />
		<xsd:attribute name="assembly" />
	</xsd:complexType>

	<xsd:complexType name="assembly">
		<xsd:choice maxOccurs="unbounded" minOccurs="0">
			<xsd:element name="attribute" type="attribute" />
			<xsd:element name="type" type="type" />
		</xsd:choice>
		<xsd:attribute name="fullname" use="required" />
		<xsd:attribute name="feature" />
		<xsd:attribute name="featurevalue" type="xsd:boolean" />
		<xsd:attribute name="featuredefault" type="xsd:boolean" />
	</xsd:complexType>

	<xsd:complexType name ="nestedtype">
		<xsd:choice minOccurs="0" maxOccurs="unbounded">
			<xsd:element name="event" type="membertype" />
			<xsd:element name="method" type="method" />
			<xsd:element name="field" type="membertype" />
			<xsd:element name="property" type="membertype" />
			<xsd:element name="attribute" type="attribute" />
			<xsd:element name="type" type="nestedtype" />
		</xsd:choice>
		<xsd:attribute name="name" use="required"/>
		<xsd:attribute name="feature" />
		<xsd:attribute name="featurevalue" type="xsd:boolean" />
		<xsd:attribute name="featuredefault" type="xsd:boolean" />
	</xsd:complexType>

	<xsd:complexType name="type">
		<xsd:choice maxOccurs="unbounded" minOccurs="0">
			<xsd:element name="attribute" type="attribute" />
			<xsd:element name="event" type="membertype" />
			<xsd:element name="method" type="method" />
			<xsd:element name="field" type="membertype" />
			<xsd:element name="property" type="membertype" />
			<xsd:element name="type" type="nestedtype"/>
		</xsd:choice>
		<xsd:attribute name="feature" />
		<xsd:attribute name="featurevalue" type="xsd:boolean" />
		<xsd:attribute name="featuredefault" type="xsd:boolean" />
		<xsd:attribute name="fullname" use="required"/>
	</xsd:complexType>

	<xsd:element name="linker">
		<xsd:complexType>
			<xsd:choice maxOccurs="unbounded" minOccurs="0">
				<xsd:element name="assembly" type="assembly" />
				<xsd:element name="type" type="type" />
			</xsd:choice>
		</xsd:complexType>
	</xsd:element>

</xsd:schema>